package com.liuhouse.controller;

import com.liuhouse.constants.SystemCanstants;
import com.liuhouse.dto.addCommentDto;
import com.liuhouse.pojo.Comment;
import com.liuhouse.service.ICommentService;
import com.liuhouse.utils.BeanCopyUtils;
import com.liuhouse.utils.ResponseResult;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

@RestController
@RequestMapping("/comment")
@Api(tags = "评论的相关接口文档" , description = "我是评论的描述信息")
public class CommentController {

    @Autowired
    private ICommentService commentService;


    /**
     * 获取文章的评论信息
     * @param articleId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @GetMapping("/commentList")
    @ApiOperation(value="友情评论列表" , notes = "获取友情链接评论区的评论")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "articleId" , value = "文章ID"),
            @ApiImplicitParam(name = "pageNum" , value = "当前第几页"),
            @ApiImplicitParam(name = "pageSize" , value = "每页大小")
    })
    public ResponseResult commentList(Long articleId , Integer pageNum , Integer pageSize){
        return commentService.commentList(SystemCanstants.ARTICLE_COMMENT , articleId , pageNum , pageSize);
    }

    @GetMapping("/linkCommentList")
    //在友链的评论区发送评论,ResponseResult是我们在liuhouse-framework工程写的类
    public ResponseResult linkCommentList(Integer pageNum , Integer pageSize){
        //其实两个查询的方法是一样的,只是类型的区分，根据类型去服务层去找对应的数据即可
        return commentService.commentList(SystemCanstants.LINK_COMMENT , null , pageNum , pageSize);
    }


    /**
     * 在文章评论区发送评论  ResponseResult是我们在liuhouse-framework工程中写的类
     * 前端传递过来的数据是请求体的话  就必须请求类型是Post请求
     * 而且必须在参数前面添加  @RequestBody注解
     * 其实不管是文章评论的添加 还有友情链接评论的添加  都是使用一个接口   只是前端传递的数据类型不同而已
     * @param comment
     * @return
     */
    @PostMapping
    public ResponseResult addComment(HttpServletRequest request , @RequestBody addCommentDto addCommentDto){
//        String token = request.getHeader("token");
//       if(token == null){
//           throw new SystemException(AppHttpCodeEnum.NEED_LOGIN);
//       }
        //将addCommentDto类转化为Comment类类型
        //其实两个字段都是差不多的，其实直接使用Comment接收是可以的 ， 为了描述清楚，效率高,使用dto也是可以的 加的时候不会有别的字段
        //因为数据库就是那些字段   只有读取的时候也许会有新的 使用vo
        Comment comment = BeanCopyUtils.copyBean(addCommentDto, Comment.class);
        return commentService.addComment(comment);
    }

}
